﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Tibet.Datos.Interfaces;
using Tibet.Datos;
using Tibet.Entidades;
using System.Data.SqlClient;
using Tibet.Datos.FabricaDatos;

namespace Tibet.Datos.DaosSqlServer
{
    public class DaoSqlServerAccesoRegla:IDaoAccesoRegla
    {

        #region Constructor
        public DaoSqlServerAccesoRegla()
        {
        }
        #endregion 


        #region Conexion
        /// <summary>
        /// Llamar a la clase de conexion
        /// <returns>devuelve la conexion</returns>

        IDaoAccesoConexion bd = FabricaConexion.DaoSqlServerAccesoConexion();

        #endregion


        //Metodo que me devuelve todas las reglas que sean de tipo NombreClase
        public List<Entidad> ConsultarReglas(String nombre)
        {
            //Boolean respuestaQuery = false;
            List<Entidad> listaReglas = new List<Entidad>();
            SqlCommand command = new SqlCommand();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglasPorTipo]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@name", nombre);
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    EntidadRegla reglaClases = new EntidadRegla();
                    reglaClases.IdRegla = reader.GetInt32(0);
                    reglaClases.NombreRegla = reader.GetString(1);
                    reglaClases.DescripcionRegla = reader.GetString(2);
                    listaReglas.Add(reglaClases);
                }
                return listaReglas;
            }
            catch (SqlException)
            {
                Console.WriteLine("Error de SqlServer al consultar una regla por tipo");
                return null;
            }

            catch (Exception)
            {
                Console.WriteLine("Error al consultar una regla por tipo");
                return null;
            }
            finally
            {
                bd.CerrarConexionBd();

            }
        }

        public int ConsultarReglaPorNombre(String nombre)
        {
            //Boolean respuestaQuery = false;
            SqlCommand command = new SqlCommand();
            //PerfilRegla perfil = new PerfilRegla();

            EntidadRegla regla = new EntidadRegla();

            try
            {
                bd.AbrirConexionBd();
                command.Connection = bd.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
                command.CommandText = "[dbo].[SELReglaPorNombre]"; // Nombre del Procedimiento Almacenado en la Base de Datos
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@nombreRegla", nombre);
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    (regla as EntidadRegla).IdRegla = reader.GetInt32(0);
                }

                return regla.IdRegla;
          
            }
            catch (SqlException)
            {
                Console.WriteLine("Error de SqlServer al consultar  regla por nombre");
                return -1;
            }

            catch (Exception)
            {
                Console.WriteLine("Error al consultar  regla por nombre");
                return -1;
            }
            finally
            {
                bd.CerrarConexionBd();

            }
        }


    }
}
